#ifndef SEM_H
#define SEM_H


#include <exception>
#include <semaphore.h>
class sem
{
    public:
        //初始化信号量  
        sem()
        {
            if(sem_init(&m_sem,0,0) != 0) 
                throw std::exception();
        }

        sem(int num)
        {
            if(sem_init(&m_sem,0,num) != 0 )
                throw std::exception();
        }

        ~sem()
        {
            sem_destroy(&m_sem);
        }
        
        bool post()
        {
            //如果返回0 则下一次wait将会被阻塞 
            return sem_post(&m_sem) == 0;
        }

        bool wait()
        {
            //阻塞 如果==0就一直阻塞 只有>0才返回 
            return sem_wait(&m_sem);
        }
    private:
        sem_t m_sem;
};
#endif